Haar是一種在視覺和圖像處理中常用的特徵檢測技術,可以在圖片中偵測特定物件是否存在,這個特定物件可以是人、貓、狗、交通號誌以及車輛等等。
要做偵測物件的圖片時,我們需要先蒐集正樣本圖片以及負樣本圖片,正樣本圖片就是包含要偵測物件的圖片,負樣本圖片就是不包含要偵測物件的圖片。
由於要做的範例是從手機拍攝下來的,解析度非常大,因此需要轉成較小的圖片才能進行訓練。
正樣本處理:
(1)轉換圖片尺寸
清空指定資料夾的內容
def emptydir(dirname): #清空資料夾
if os.path.isdir(dirname): #資料夾存在就刪除
shutil.rmtree(dirname) #徹底清空資料夾
sleep(2)
os.mkdir(dirname) #建立資料夾
將指定資料夾中所有JPG圖片調整尺寸後保存到另一個資料夾
def dirResize(src, dst):
myfiles = glob.glob(src + '/*.JPG') #讀取資料夾全部jpg檔案
emptydir(dst)
print(src + ' 資料夾:')
print('開始轉換圖形尺寸!')
for i, f in enumerate(myfiles):
img = Image.open(f)
img_new = img.resize((300, 225), PIL.Image.ANTIALIAS)
outname = str("resizejpg") + str('{:0>3d}').format(i+1) + '.jpg'
img_new.save(dst + '/' + outname) #生成新的檔案名稱
print('轉換圖形尺寸完成!\n')
對這兩個不同的資料夾執行相同的圖片調整尺寸
import PIL
from PIL import Image
import glob
import shutil, os
from time import sleep
dirResize('carPlate_sr', 'carPlate')
dirResize('realPlate_sr', 'realPlate')
(2)轉為bmp格式
建立Haar模型時正樣本圖形需要用bmp格式。
from PIL import Image
import glob
import os
myfiles = glob.glob("carPlate/*.JPG")
print('開始轉換圖形格式!')
for f in myfiles:
namespilt = f.split("\\")
img = Image.open(f)
outname = namespilt[1].replace('resizejpg', 'bmpraw') #置換檔名
outname = outname.replace('.jpg', '.bmp') #置換附加檔名
img.save('carPlate/'+ outname, 'bmp') #以bmp格式存檔
os.remove(f)
print('轉換圖形格式結束!')
處理負樣本圖片
清空指定資料夾的內容
def emptydir(dirname):
if os.path.isdir(dirname):
shutil.rmtree(dirname)
sleep(2)
os.mkdir(dirname)
調整尺寸並轉換為灰階
import PIL
from PIL import Image
import glob
import shutil, os
from time import sleep
myfiles = glob.glob("carNegative_sr/*.JPG")
emptydir('carNegative')
print('開始轉換尺寸及灰階!')
for i, f in enumerate(myfiles):
img = Image.open(f)
img_new = img.resize((500, 375), PIL.Image.ANTIALIAS)#使用ANTIALIAS方法來平滑調整
img_new = img_new.convert('L') #轉換為灰階
outname = str("negGray") + str('{:0>3d}').format(i+1) + '.jpg'
img_new.save('carNegative/'+ outname)
i = i + 1
print('完成轉換尺寸及灰階!')
還沒結束喔,明天繼續加油!
---20231012---